package mysql8学习.高级.第06章_索引的数据结构;

/**
 * B+树也是一种多路搜索树，基于B树做出了改进，主流的DBMS都支持B+树的索引方式，
 * 比如MySQL。相比于B-Tree，B+Tree适合 文件索引系统。
 *
 * B+数方便循序便利 (所有值都在子叶子节点  且都用链表连着)
 * B数难以顺序遍历 （没有按照链表链接 相对麻烦 中序遍历才能完成查询范围的查找）
 *
 * B+树和B树的差异在于以下几点:
 *   1. B+有k个孩子的节点就有k个关键字。也就是孩子数量=关键字数，（关键字就是每个子支的最小数）
 *       而B树中，孩子数量=关键字数+1。（小于最小的   在两个数之间的  大于最大的）
 *   2.非叶子节点的关键字也会同时存在在子节点中，并且是在子节点中所有关键字的最大(或最小)。
 *   3.非叶子节点仅用于索引，不保存数据记录，跟记录有关的信息都放在叶子节点中。
 *      而B树中，非叶子节点既保存索引，也保存数据记录。
 *   4.所有关键字都在叶子节点出现，叶子节点构成一个有序链表，
 *       而且叶子节点本身按照关键字的大小从小到大顺序链接。
 *
 *
 *
 * B+树相对B树 优点  ： 效率更稳定  效率更高
 *
 * ● B+树和B树有个根本的差异在于，B+树的中间节点并不直接存储数据。这样的好处都有什么呢?
 *
 * ● 首先，B+树查询效率更稳定。因为B+树每次只有访问到叶子节点才能找到对应的数据，
 *   而在B树中，非叶子节点也会存储数据，这样就会造成查询效率不稳定的情况，
 *   有时候访问到了非叶子节点就可以找到关键字，而有时需要访问到叶子节点才能找到关键字。
 *
 * ● 其次，B+ 树的查询效率更高。这是因为通常B+树比B树更矮胖(阶数更大，深度更低)，
 *            （比如一个页最多16kb 由于b树会存所有信息  数量就会少 分的就少）
 *  查询所需要的磁盘I/O也会更少。同样的磁盘页大小，B+ 树可以存储更多的节点关键字。
 *
 * ● 不仅是对单个关键字的查询上，在"查询范围"上, B+树的效率也比B树高。
 *   这是因为所有关键字都出现在B+树的叶子节点中，叶子节点之间会有指针，
 *   数据又是递增的，这使得我们范围查找可以通过指针连接查找。
 *   而在B树中则需要通过中序遍历才能完成查询范围的查找，效率要低很多。
 *
 *   B树和B+树都可以作为索引的数据结构，在MySQL中采用的是B+树。
 *   但B树和B+树各有自己的应用场景，不能说B+树完全比B树好，反之亦然。
 *
 *
 */
public class J6_B加树 {
}



